%{

#include <stdio.h>
#include <stdlib.h>

extern int yylex();
extern int yyparse();
extern FILE* yyin;

void yyerror(const char* s);
%}

%union {
	int ival;
}

%token<ival> T_INT
%token T_PLUS T_MINUS T_LEFT T_RIGHT
%token T_END
%left T_PLUS T_MULT;

%type<ival> E
%type<ival> T
%type<ival> F

%start calculation

%%
calculation: E T_END {printf("%d\n", $1);exit(0);}
;
E: E T_PLUS T {$$ = $1 + $3;}
 | T {$$ = $1;}
 | E T_MINUS T {$$ = $1 - $3;}
;
T: T T_MULT F {$$ = $1 * $3;}
 | F {$$ = $1;}
;

F: T_INT {$$ = $1;}
 |T_LEFT E T_RIGHT {$$ = $2;}
;
%%

int main() {
	yyin = stdin;

	do { 
		yyparse();
	} while(!feof(yyin));

	return 0;
}

void yyerror(const char* s) {
	fprintf(stderr, "Parse error: %s\n", s);
	exit(1);
}